package utilities;

import entity.Annuncio;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Wrapper che assegna a un annuncio l'informazione sulla sua distanza da un certo indirizzo
 * per poter ordinare gli annunci in base alla distanza
 * @author fabio
 */
public class AnnuncioConDistanza implements Comparable<AnnuncioConDistanza> {
    
    Annuncio annuncio;
    
    double dist;


    AnnuncioConDistanza() {}
    
    AnnuncioConDistanza(Annuncio a, String from) {
        annuncio = a;
        if (from != null){
            dist = utilities.googleMap.DistanceMatrix.distanceFrom(from, a.getIndirizzoRitiro().getDescrizione());
        }
    }
    
    /**
     * Restituisce l'annuncio
     * @return l'annuncio
     */
    public Annuncio getAnnuncio() {
        return annuncio;
    }

    /**
     * Imposta l'annuncio
     * @param annuncio 
     */
    public void setAnnuncio(Annuncio annuncio) {
        this.annuncio = annuncio;
    }
    
    /**
     * Restituisce la distanza
     * @return la distanza
     */
    public double getDistanza() {
        return dist;
    }
    
    /**
     * Imposta la distanza dell'annuncio
     * @param dist distanza dell'annuncio
     */
    public void setDistanza(double dist) {
        this.dist = dist;
    }
    
    @Override
    public int compareTo(AnnuncioConDistanza t) {
            return Double.compare(dist, t.dist);
    }

    /**
     * Ordina una lista di annunci in base alla loro distanza da un certo indirizzo
     * @param l lista di annunci da ordinare
     * @param s indirizzo dal quale calcolare la distanza
     * @return la lista di annunci ordinati
     */
    public static List<AnnuncioConDistanza> ordina(List<Annuncio> l, String s) {
        List al = new ArrayList();
        
        for (Annuncio a : l) {
            al.add(new AnnuncioConDistanza(a,s));
        }
        
        if (s == null || s.equals(""))
            return al;
        
        Collections.sort(al);
        
        return al;
    }
    
}